// 使用举例
#include <functional>
#include<iostream>
using namespace std;
int Plus(int a, int b) { 
    cout<<"a"<<a<<" b:"<<b<<endl;
    return a + b; }
class Sub {
public:
    int sub(int a, int b) { return a - b; }
};
int main() {
    // 表示绑定函数plus 参数分别由调用 func1 的第一，二个参数指定
    std::function<int(int, int)> func1 =
        std::bind(Plus, placeholders::_1, placeholders::_2);
    // auto func1 = std::bind(Plus, placeholders::_1, placeholders::_2);
    // func2的类型为 function<void(int, int, int)> 与func1类型一样
    // 表示绑定函数 plus 的第一，二为： 1， 2
    auto func2 = std::bind(Plus, 100, placeholders::_5);//placeholdres::_5 表示绑定func2(),第几个参数
    cout << func1(1, 2) << endl;
    cout << func2(1,2,3,4,5) << endl;
    Sub s;
    // 绑定成员函数
    std::function<int(int, int)> func3 =
        std::bind(&Sub::sub, s, placeholders::_1, placeholders::_2);
    std::function<int(int, int)> func4 =
        std::bind(&Sub::sub, s, placeholders::_2, placeholders::_1);
    cout << func3(1, 2) << endl;
    cout << func4(1, 2) << endl;
    return 0;
}